<?
$aTipiCred = array('ldap'=>'auth_ldap','itadle0a'=>'auth_itadle0a');
if (class_exists('COM')) {
   $aTipiCred['windows'] = 'auth_windows';
}
$tr = (isset($_REQUEST['tr'])) ? $_REQUEST['tr'] : '???';
switch ($tr) {
   case "tipi_cred" :
   	$str = "OK ".implode(',',array_keys($aTipiCred));
   	break;
   case "login" :
      $credenz = strtolower(trim(stripslashes($_REQUEST['credenz'])));
      $pos=strpos($credenz,':');
      if ($pos === false) {
         $str = "KO - credenziali non accettate<br>($credenz)";
         break;
      }
      $tipoCred = strtolower(trim(substr($credenz,0,$pos)));
      if (!isset($aTipiCred[$tipoCred])) {
	      $str = "KO - tipo credenziali non accettato<br>($credenz)";      
	      break;
      }
      $authFunc = $aTipiCred[$tipoCred];
   	$str = $authFunc();
      break;
   default:
   	$str = "KO - autenticreqtype fallita - parametro 'tr=$tr' errato";
   	break;
}

echo "Variabili POST: ";
foreach($_REQUEST as $nome => $val) {
   echo $nome." = ".$val.", ";
}

echo "<br/>";
echo "_zxcv_get_ug_".$str."_zxcv_get_ug_";
echo "<br/><a href='testAuth.php'>torna</a>";

function auth_windows() {
	global $Auth;
	$credenz = strtolower(trim(stripslashes($_REQUEST['credenz'])));
	$pos=strpos($credenz,':');
   $aDomUt = explode("/",str_replace("\\","/",substr($credenz,$pos+1)));
   if (count($aDomUt) != 2) {
      $str = "KO - credenziali Windows errate - manca dominio<br>($credenz)";
      return $str;
   }
   $dominio = trim($aDomUt[0]);
   $utente = trim($aDomUt[1]);
   $password = stripslashes($_REQUEST['password']);
   if (substr($dominio,0,5) == 'qnet-') { // dominio fittizio qnet-xxxxxx - xxxxxx @ la password
       if ($password == substr($dominio,5)) {
         $str = "OK";
         return $str;
       } else {
         $str = "KO - password o utente errati.";
         return $str;
       }
   }
   $strVD = verifica_dominio($dominio);
   if ($strVD != "**ok**") {
      $str = "KO - credenziali Windows errate - dominio inesistente<br>($credenz)";
      return $str;
   }
   $login = trim(strtolower(stripslashes($utente)));
   $pwd = trim(strtolower(stripslashes($pwd)));
   $logon = $Auth->Logon($utente,$password,$dominio);
   if ($logon == false) {
   	$codErr = $Auth->getCodErr();
   	switch ($codErr) {
   		case 10:
       		$str = "KO - credenziali Windows errate - utente inesistente<br>($credenz)<br>Contattare l'EDP di Adale Sistemi";
       		return $str;
   		case 20:
       		$str = "KO - utente Windows bloccato<br>($credenz)<br>Contattare l'EDP di Adale Sistemi";
       		return $str;
   		case 30:
       		$str = "KO - utente Windows disabilitato<br>($credenz)<br>Contattare l'EDP di Adale Sistemi";
       		return $str;
   	}
      $str = "KO - password Windows errata<br>($credenz)";
      return $str;
   }
   $str = "OK";
   return $str;
}

function verifica_dominio($dominio) {
   global $Auth;
   if (empty($dominio)) {return "KO dominio non specificato";}
   $a_server_com['dominio1'] = 'server1';
   if (isset($a_server_com[$dominio])) {
      $server_com = $a_server_com[$dominio];
   } else {
      $server_com = 'localhost';
   }
   echo "takeoff_auth.winsys, '$server_com', '$dominio'";
   $Auth = new COM("takeoff_auth.winsys", $server_com)
      or die("KO Impossibile istanziare oggetto COM 'takeoff_auth.winsys' su '$server_com'");
   // verifica che il dominio passato esista.
   $a_domains = $Auth -> getDomains();
   if (!in_array($dominio,$a_domains)) {return "KO dominio ".strtoupper($dominio)." inesistente";}
   return "**ok**";
}

function auth_ldap() {
	global $Auth;
   $password = stripslashes($_REQUEST['password']);
   if ($password == '') {
   	return  "KO - digitare password\r\n";
   }
	$credenz = strtolower(trim(stripslashes($_REQUEST['credenz'])));
	if (!function_exists('ldap_connect')) {
		return "KO - autenticreqtype fallita <br> client LDAP non installato <br>($credenz)\r\n";
	}
	$pos=strpos($credenz,':');
   if (substr($credenz,$pos+1,2)!= '//') {
   	return "KO - autenticreqtype fallita <br> credenziali errate <br>($credenz)\r\n";
   }
	$pos2=strpos($credenz,'/',$pos+3);
   if ($pos2===false) {
   	return "KO - autenticreqtype fallita <br> credenziali errate. <br>($credenz)\r\n";
   }
	$ldapServer = substr($credenz,$pos+3,$pos2-$pos-3);
	$DN = substr($credenz,$pos2+1);
	$ds=@ldap_connect($ldapServer);  
   //return  "KO - qui ci sono ($credenz)\r\n";
	if (!$ds) {
	   return  "KO - autenticreqtype fallita <br> errore connessione server LDAP <br>($credenz)\r\n";
	}
	$r=@ldap_bind($ds,$DN,$password);
	if (!$r) {
	   $str = "KO - password errata o utente sconosciuto <br>".ldap_error($ds)." - ($credenz)\r\n";
	} else {
		$str = "OK";	
	}
	@ldap_close($ds);
	return $str;	
}

function auth_itadle0a() {
	global $Auth;
	$credenz = strtolower(trim(stripslashes($_REQUEST['credenz'])));
	$pos=strpos($credenz,':');
   $user = substr($credenz,$pos+1);
   $password = stripslashes($_REQUEST['password']);
	$ldapServer = '172.16.3.100';
	$DN = "cn=$user,cn=users,dc=itadle0a,dc=adalesistemi,dc=com";
	$ds=@ldap_connect($ldapServer);  
	if (!$ds) {
	   return  "KO - connessione server LDAP fallita ! ($credenz)\r\n";
	}
	$r=@ldap_bind($ds,$DN,$password);
	if (!$r) {
	   $str = "KO - Autenticreqtype LDAP fallita <br>".ldap_error($ds)."<br>($credenz)\r\n";
	} else {
		$str = "OK";	
	}
	@ldap_close($ds);
	return $str;	
}

?>